#include "testlib.h"
#include <iostream>
#include <sstream>

int main(int argc, char *argv[])
{
    // 初始化检查器
    registerTestlibCmd(argc, argv);

    int juryLineNumber = 1, participantLineNumber = 1;
    int diffColumnNumber = -1;
    char juryChar, participantChar;
    std::string juryLine, participantLine;

    while (true)
    {
        // 从标准答案和用户答案中分别读取一行
        if (!ans.seekEof())
        {
            juryLine = ans.readLine();
        }
        else
        {
            juryLine = ""; // 标记标准答案已结束
        }

        if (!ouf.seekEof())
        {
            participantLine = ouf.readLine();
        }
        else
        {
            participantLine = ""; // 标记用户答案已结束
        }

        // 如果两者都到达文件末尾，则退出循环
        if (juryLine.empty() && participantLine.empty())
            break;

        std::istringstream juryStream(juryLine);
        std::istringstream participantStream(participantLine);
        int columnNumber = 1;

        while (true)
        {
            juryChar = juryStream.get();
            participantChar = participantStream.get();

            // 如果两个流都到达末尾，则退出内层循环
            if (juryStream.eof() && participantStream.eof())
                break;

            // 检查是否相同
            if (juryChar != participantChar)
            {
                diffColumnNumber = columnNumber; // 记录不同的位置（列号）

                quitf(_wa, "第 %d 行, 第 %d 列: 标准答案为 '%c', 你的答案为 '%c'.",
                      juryLineNumber, diffColumnNumber, juryChar, participantChar);
            }

            // 更新列号
            columnNumber++;
        }

        // 处理当前行结束后的情况
        if (!juryStream.eof() || !participantStream.eof())
        {
            quitf(_wa, "第%d行长度不匹配。", juryLineNumber);
        }

        // 更新行号
        juryLineNumber++;
        participantLineNumber++;
    }

    // 如果没有错误发生，表示答案正确
    if (ans.seekEof() != ouf.seekEof())
    {
        quitf(_fail, "总行数不匹配。");
    }

    quitf(_ok, "恭喜你，AC啦。");
}